package com.neuedu.corejava.ch10.homework;

import java.util.LinkedList;

/**
 * 20190812
 * 3、请使用LinkedList来模拟一个队列(先进先出的特性): [必做题]
           3.1 拥有放入对象的方法void put(Object o)
           3.2 取出对象的方法Object get()
           3.3 判断队列当中是否为空的方法boolean isEmpty()；并且，编写测试代码，验证你的队列是否正确。
 * @author admin
 *
 */
public class ch103 {

	//定义一个内部 存储空间
	private LinkedList storage=new LinkedList();
	
	public void put(Object object){
		storage.add(object);//add方法：把数据保存到链表的后面
		//storage.addLast(object);//addLast:把数据保存到链表的后面，语义更明确
	}
	
	public Object get(){
		Object object=null;
		if(!storage.isEmpty()){
			object=storage.get(0);//每次获取第一条数据
			//storage.remove(0);//获取后需要从队列删除（移除）该数据
			storage.remove(object);//功能与storage.remove(0);相同
			
			//storage.pollFirst();//调用LinkeList的队列功能，功能与前两行代码相同（一致）
		}
		return object;//在定义方法骨架时，返回值一般为类型的默认
	}
	
	public boolean isEmpty(){
		boolean ret=false;
		ret=storage.isEmpty();
		return ret;
	}
	
	public static void main(String[] args) {
		//已知功能，进行功能验证的代码，针对单个功能进行测试-单元测试
		//1.读懂代码的功能，理解代码
		//2.设计测试用例，使用循环结构生成一批数据，并保存到队列中，模拟一批有序的数据
		//3.遍历集合，取出数据，并检查数据的顺序
		//
		ch103 queue=new ch103();
		for(int i=0;i<10;i++){
			queue.put("date"+i);
		}
		Object obj=null;
		while((obj=queue.get())!=null){
			System.out.println(obj);
			if(queue.isEmpty()){
				System.out.println("数据已经获取完毕，队列清空");
			}
		}
	}

}
